提供錢包用戶交互的介面
錢包用戶分為兩類
import
import { createWalletClient } from 'viem'
JSON-RPC Accounts
簡單的範例
import { createWalletClient, custom } from 'viem'
import { mainnet } from 'viem/chains'
const client = createWalletClient({
chain: mainnet,
transport: custom(window.ethereum)
})
const [address] = await client.getAddresses()
// or: const [address] = await client.requestAddresses()
const hash = await client.sendTransaction({
account: address,
to: '0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC',
value: parseEther('0.001')
})
上面可以看到 window.ethereum
這就是使用預覽器中的ethereum 的提供商(ex:小狐狸…)
Local Accounts
• Private Key Account 私鑰
• Mnemonic Account 註記詞
• Hierarchical Deterministic (HD) Account
https://gist.github.com/Ankarrr/d82b49bbb481bf3181274cfd71b30bcc
簡單的範例
import { createWalletClient, http } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { mainnet } from 'viem/chains'
const client = createWalletClient({
chain: mainnet,
transport: http()
})
const account = privateKeyToAccount('0x...') // 設定私鑰
const hash = await client.sendTransaction({
account,
to: '0xa5cc3c03994DB5b0d9A5eEdD10CabaB0813678AC',
value: parseEther('0.001')
})
用法上差不多只是帳號使用方式不同。
實作範例:
https://github.com/0xRory/ITHepleViem/blob/main/examples/2_2_wallet.js
參考:
https://viem.sh/docs/clients/wallet.html
用於測試的 JSON-RPC AP,這方法通過本地乙太坊測試節點的介面,例如(Hardhart、Ganache)
import
import { createTestClient } from 'viem'
JSON-RPC Accounts
簡單的範例
import { createTestClient, http, publicActions, walletActions } from 'viem'
import { foundry } from 'viem/chains'
const client = createTestClient({
chain: foundry,
mode: 'hardhart',
transport: http(),
})
.extend(publicActions)
.extend(walletActions)
const blockNumber = await client.getBlockNumber() // Public Action
const hash = await client.sendTransaction({ ... }) // Wallet Action
const mine = await client.mine({ blocks: 1 }) // Test Action
如果要使用的話請記得把測試節點跑起來喔!!!!
上面可以看到 extend 這部分可以擴充 public, wallet 的動作,這樣的話不會建立三個不同的用戶端
參考:
https://viem.sh/docs/clients/test.html
老實說這樣的分類個人覺得還不錯至少在宣告的時候我們就知道這些 RPC 會是什麼用途的。